package com.luzyluis.medicalcalendar.controlador;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.luzyluis.medicalcalendar.clases.Medicamento;
import com.luzyluis.medicalcalendar.clases.Tratamiento;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class TratamientosDB extends SQLiteOpenHelper {

    String cadSql = "CREATE TABLE tratamientos ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT, "
            + "codMedicamento VARCHAR(10), cantidadTrat REAL, modoTrat String,"
            + "desayuno INTEGER, almuerzo  INTEGER, comida INTEGER, merienda INTEGER, cena INTEGER, acostarse INTEGER,"
            + " fechaIni VARCHAR(10), fechaFin VARCHAR(10), fechaMaxDisp VARCHAR(10), imagen VARCHAR(50);";
    SQLiteDatabase db;


    public TratamientosDB(Context contexto, String nombre,
                          SQLiteDatabase.CursorFactory factory, int version) {
        super(contexto, nombre, factory, version);
    }


    /**
     * Método de SQLiteOpenHelper Método que se ejecuta para crear la bbdd
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(cadSql);
    }


    /**
     * Método de SQLiteOpenHelper Método que se ejecuta cuando hay nuevas
     * versiones
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }


    public void guardarTratamiento(String codMedicamento, float cantidadTrat, String modoTrat,
                                   int desayuno, int almuerzo, int comida, int merienda,
                                   int cena, int acostarse,
                                   Calendar fechaIni, Calendar fechaFin, Calendar fechaMaxDisp, String image) {
        ContentValues nuevoRegistro = new ContentValues();
        nuevoRegistro.put("codMedicamento", codMedicamento);
        nuevoRegistro.put("cantidadTrat", cantidadTrat);
        nuevoRegistro.put("modoTrat", modoTrat);

        nuevoRegistro.put("desayuno", desayuno);
        nuevoRegistro.put("almuerzo", almuerzo);
        nuevoRegistro.put("comida", comida);
        nuevoRegistro.put("merienda", merienda);
        nuevoRegistro.put("cena", cena);
        nuevoRegistro.put("acostarse", acostarse);

        nuevoRegistro.put("fechaIni", String.valueOf(fechaIni));
        nuevoRegistro.put("fechaFin", String.valueOf(fechaFin));
        nuevoRegistro.put("fechaMaxDisp", String.valueOf(fechaMaxDisp));
        nuevoRegistro.put("image", image);

        db.insert("tratamientos", null, nuevoRegistro);
    }

    public ArrayList<Tratamiento> consultarTratamiento(String dato) {
        ArrayList<Tratamiento> tratamiento = new ArrayList<Tratamiento>();
        String sql = "SELECT * FROM tratamientos WHERE codMedicamento = dato";

        try {
            if (db != null) {
                Cursor resultado = db.rawQuery(sql, null);

                if (resultado.moveToFirst()) {
                    do {
                        int id = resultado.getInt(0);
                        String codMedicamento = (resultado.getString(1));
                        float cantidadTrat = resultado.getFloat(2);
                        String modoTrat = resultado.getString(3);
                        int desayuno = resultado.getInt(4);
                        int almuerzo = resultado.getInt(5);
                        int comida = resultado.getInt(6);
                        int merienda = resultado.getInt(7);
                        int cena = resultado.getInt(8);
                        int acostarse = resultado.getInt(9);
                        Date fechaIni = new Date(resultado.getString(10));
                        Date fechaFin = new Date(resultado.getString(11));
                        Date fechaMaxDisp = new Date(resultado.getString(12));
                        String image = resultado.getString(13);

                        Tratamiento t = new Tratamiento(codMedicamento, cantidadTrat, modoTrat, desayuno, almuerzo,
                                comida, merienda, cena, acostarse, fechaIni, fechaFin, fechaMaxDisp, image);

                        tratamiento.add(t);
                    } while (resultado.moveToNext());
                }
            }
        } catch (Exception e) {
            Log.e("ERROR", "Error medicamentosDia(dato) " + e.getMessage());
        }
        return tratamiento;
    }

    public ArrayList<Tratamiento> medicamentosDia(Long fecha) {
        Date dato = new Date(fecha);
        ArrayList<Tratamiento> tratamiento = new ArrayList<Tratamiento>();
        String sql = "SELECT * FROM tratamientos WHERE fechaIni = '" + dato.getDay() + "/"
                + dato.getMonth() + "/" + (1900 + dato.getYear()) + "';";

        try {
            if (db != null) {
                Cursor resultado = db.rawQuery(sql, null);

                if (resultado.moveToFirst()) {
                    do {
                        int id = resultado.getInt(0);
                        String codMedicamento = (resultado.getString(1));
                        float cantidadTrat = resultado.getFloat(2);
                        String modoTrat = resultado.getString(3);
                        int desayuno = resultado.getInt(4);
                        int almuerzo = resultado.getInt(5);
                        int comida = resultado.getInt(6);
                        int merienda = resultado.getInt(7);
                        int cena = resultado.getInt(8);
                        int acostarse = resultado.getInt(9);
                        Date fechaIni = new Date(resultado.getString(10));
                        Date fechaFin = new Date(resultado.getString(11));
                        Date fechaMaxDisp = new Date(resultado.getString(12));
                        String image = resultado.getString(13);

                        Tratamiento t = new Tratamiento(codMedicamento, cantidadTrat, modoTrat, desayuno, almuerzo,
                                comida, merienda, cena, acostarse, fechaIni, fechaFin, fechaMaxDisp, image);

                        tratamiento.add(t);
                    } while (resultado.moveToNext());
                }
            }
        } catch (Exception e) {
            Log.e("ERROR", "Error medicamentosDia(fecha) " + e.getMessage());
        }
        return tratamiento;
    }
}

